package BackTrack.万诺;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static MyUtils.MHUtils.*;
import static MyUtils.MHMoban.*;

/*
    子集
        cI

        (122 for临同con
 */

public class 子集II90{
    @Test
    public void test() {
        int[] m = {1,2,2};
        System.out.println(subsetsWithDup(m));
    }

    int[] p;
    List<List<Integer>> res = new ArrayList<>();
    List<Integer> tmp = new ArrayList<>();

    public List<List<Integer>> subsetsWithDup(int[] nums) {
        p = nums;
        Arrays.sort(nums); // 122 需要先排序 后临同的

        int cI = 0; // 子集背一下是cI
        bT(cI);
        res.add(new ArrayList<>()); // 子集含空[]
        return res;
    }

    /* 完全按图写的代码 , 不是题感 */
    private void bT(int cI) {
        if(cI == p.length){
            return;
        }

        int old = -233333;
        for (int i = cI; i < p.length; i++) {
            // 122 删 for排序后临同的 -> 画122普子集树 -> 一点点发现的 【注 是i不是cI】
            int cur = p[i];
            if (cur == old){
                continue;
            }

            tmp.add(p[i]);
            res.add(new ArrayList<>(tmp));
            bT(i+1);
            tmp.remove(tmp.size()-1);

            old = p[i];
        }
    }
}
